﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace DecisionFramework.Logging
{
	/// <summary>
	/// Specifies the interface for the application event logging 
    /// service. First, you must select a channel to send the app event to.
	/// </summary>
	/// <remarks> 
    /// There can be different implementations: one that logs to the event viewer 
    /// or one that logs to Azure storage.
    /// 
    /// Use EventViewerLogService to log to the event viewer.
    /// Use AzureLogService to log to Azure storage.
    /// 
	/// Author: Greg Cowin
	/// </remarks>
	public interface ILogService 
	{
		/// <summary>
		/// Admin: support events that target end users, administrators, and support personnel.
		/// </summary>
		IChannel Admin { get; }

		/// <summary>
		/// Operational: support events that are used for analyzing and diagnosing a problem or occurrence.
		/// </summary>
		IChannel Operational { get; }

		/// <summary>
		/// Analytic: support events that are published in high volume.
		/// </summary>
		IChannel Analytic { get; }

		/// <summary>
		/// Debug: support events that are used solely by developers to diagnose a problem for debugging. Comes with 
        /// a possible performance penalty.
		/// </summary>
		IChannel Debug { get; }
	}
}
